using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: horario_empresaBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla horario_empresa, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha: 15/09/2011 10:26:47
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class horario_empresaBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "horario_empresa", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "horario_empresa", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(horario_empresa datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO horario_empresa (nombre_hora,hora_inicio_hora,hora_fin_hora,jornada,id_emp_hora_fk,estado_hora,fecha_registro_hora,cat_jor_id_fk,caduca_hora) VALUES (?nombre_hora,?hora_inicio_hora,?hora_fin_hora,?jornada,?id_emp_hora_fk,?estado_hora,?fecha_registro_hora,?cat_jor_id_fk,?caduca_hora);";
				string strConectionUpdate = "UPDATE horario_empresa SET nombre_hora = ?nombre_hora,hora_inicio_hora = ?hora_inicio_hora,hora_fin_hora = ?hora_fin_hora,jornada = ?jornada,id_emp_hora_fk = ?id_emp_hora_fk,estado_hora = ?estado_hora,fecha_registro_hora = ?fecha_registro_hora,cat_jor_id_fk = ?cat_jor_id_fk,caduca_hora = ?caduca_hora WHERE id_hora=?id_hora;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_hora = new MySqlParameter("?id_hora", MySqlDbType.Int32);
				MySqlParameter psqlNombre_hora = new MySqlParameter("?nombre_hora", MySqlDbType.VarChar,20);
				MySqlParameter psqlHora_inicio_hora = new MySqlParameter("?hora_inicio_hora", MySqlDbType.Datetime);
				MySqlParameter psqlHora_fin_hora = new MySqlParameter("?hora_fin_hora", MySqlDbType.Datetime);
				MySqlParameter psqlJornada = new MySqlParameter("?jornada", MySqlDbType.VarChar,20);
				MySqlParameter psqlId_emp_hora_fk = new MySqlParameter("?id_emp_hora_fk", MySqlDbType.Int32);
				MySqlParameter psqlEstado_hora = new MySqlParameter("?estado_hora", MySqlDbType.VarChar,20);
				MySqlParameter psqlFecha_registro_hora = new MySqlParameter("?fecha_registro_hora", MySqlDbType.Datetime);
				MySqlParameter psqlCat_jor_id_fk = new MySqlParameter("?cat_jor_id_fk", MySqlDbType.Int32);
				MySqlParameter psqlCaduca_hora = new MySqlParameter("?caduca_hora", MySqlDbType.VarChar,5);

				psqlId_hora.Value = datos.Id_hora;
				psqlNombre_hora.Value = datos.Nombre_hora;
				psqlHora_inicio_hora.Value = datos.Hora_inicio_hora;
				psqlHora_fin_hora.Value = datos.Hora_fin_hora;
				psqlJornada.Value = datos.Jornada;
				psqlId_emp_hora_fk.Value = datos.Id_emp_hora_fk;
				psqlEstado_hora.Value = datos.Estado_hora;
				psqlFecha_registro_hora.Value = datos.Fecha_registro_hora;
				psqlCat_jor_id_fk.Value = datos.Cat_jor_id_fk;
				psqlCaduca_hora.Value = datos.Caduca_hora;

				if (!Existe("id_hora=" + datos.Id_hora))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_hora
							, psqlNombre_hora
							, psqlHora_inicio_hora
							, psqlHora_fin_hora
							, psqlJornada
							, psqlId_emp_hora_fk
							, psqlEstado_hora
							, psqlFecha_registro_hora
							, psqlCat_jor_id_fk
							, psqlCaduca_hora
							);
					MessageBox.Show("Se grabo [horario_empresa] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_hora
							, psqlNombre_hora
							, psqlHora_inicio_hora
							, psqlHora_fin_hora
							, psqlJornada
							, psqlId_emp_hora_fk
							, psqlEstado_hora
							, psqlFecha_registro_hora
							, psqlCat_jor_id_fk
							, psqlCaduca_hora
							);
					MessageBox.Show("Se actualizó [horario_empresa] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(horario_empresa datos,bool con_mensaje)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("id_hora='{0}'", datos.Id_hora);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("horario_empresa"
						, new CampoValor("nombre_hora", datos.Nombre_hora)
						, new CampoValor("hora_inicio_hora",ValidarBuilder.FormatoFecha( datos.Hora_inicio_hora))
						, new CampoValor("hora_fin_hora",ValidarBuilder.FormatoFecha( datos.Hora_fin_hora))
						, new CampoValor("jornada", datos.Jornada)
						, new CampoValor("id_emp_hora_fk", datos.Id_emp_hora_fk.ToString())
						, new CampoValor("estado_hora", datos.Estado_hora)
						, new CampoValor("fecha_registro_hora",ValidarBuilder.FormatoFecha( datos.Fecha_registro_hora))
						, new CampoValor("cat_jor_id_fk", datos.Cat_jor_id_fk.ToString())
						, new CampoValor("caduca_hora", datos.Caduca_hora)
						);
                    if(con_mensaje)
					    MessageBox.Show("Se grabo [horario_empresa] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("horario_empresa", filtro
						, new CampoValor("nombre_hora", datos.Nombre_hora)
						, new CampoValor("hora_inicio_hora",ValidarBuilder.FormatoFecha( datos.Hora_inicio_hora))
						, new CampoValor("hora_fin_hora",ValidarBuilder.FormatoFecha( datos.Hora_fin_hora))
						, new CampoValor("jornada", datos.Jornada)
						, new CampoValor("id_emp_hora_fk", datos.Id_emp_hora_fk.ToString())
						, new CampoValor("estado_hora", datos.Estado_hora)
						, new CampoValor("fecha_registro_hora",ValidarBuilder.FormatoFecha( datos.Fecha_registro_hora))
						, new CampoValor("cat_jor_id_fk", datos.Cat_jor_id_fk.ToString())
						, new CampoValor("caduca_hora", datos.Caduca_hora)
						);
                    if (con_mensaje)
					    MessageBox.Show("Se actualizó [horario_empresa] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
        public static void Actualizar_Estado_ViaSql(horario_empresa datos)
        {
            try
            {
                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
                string filtro = string.Format("id_hora='{0}'", datos.Id_hora);

                bd.EjecutarUpdate("horario_empresa", filtro
                    , new CampoValor("jornada", datos.Jornada)
                    , new CampoValor("estado_hora", datos.Estado_hora)
                    );
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static void Actualizar_Estado_ViaSql(string filtro, string nuevo_estado)
        {
            try
            {
                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
                //string filtro = string.Format("id_hora='{0}'", datos.Id_hora);

                bd.EjecutarUpdate("horario_empresa", filtro
                    , new CampoValor("estado_hora", nuevo_estado)
                    );
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void Actualizar_Estado_ViaSql(string filtro, string nuevo_estado,string str_caduca)
        {
            try
            {
                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
                //string filtro = string.Format("id_hora='{0}'", datos.Id_hora);

                bd.EjecutarUpdate("horario_empresa", filtro
                    , new CampoValor("estado_hora", nuevo_estado)
                    , new CampoValor("caduca_hora", str_caduca)
                    );
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static horario_empresa Recuperar(string filtro)
		{
			horario_empresa r = new horario_empresa();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_hora = Convert.ToInt32(ds.Rows[0]["id_hora"]);
					if (ds.Rows[0]["nombre_hora"] != System.DBNull.Value)
						r.Nombre_hora = ds.Rows[0]["nombre_hora"].ToString();
					if (ds.Rows[0]["nombre_hora"] == System.DBNull.Value)
						r.Nombre_hora = "";
					if (ds.Rows[0]["hora_inicio_hora"] != System.DBNull.Value)
						r.Hora_inicio_hora = Convert.ToDateTime(ds.Rows[0]["hora_inicio_hora"]);
					if (ds.Rows[0]["hora_inicio_hora"] == System.DBNull.Value)
						r.Hora_inicio_hora = DateTime.Now;
					if (ds.Rows[0]["hora_fin_hora"] != System.DBNull.Value)
						r.Hora_fin_hora = Convert.ToDateTime(ds.Rows[0]["hora_fin_hora"]);
					if (ds.Rows[0]["hora_fin_hora"] == System.DBNull.Value)
						r.Hora_fin_hora = DateTime.Now;
					if (ds.Rows[0]["jornada"] != System.DBNull.Value)
						r.Jornada = ds.Rows[0]["jornada"].ToString();
					if (ds.Rows[0]["jornada"] == System.DBNull.Value)
						r.Jornada = "";
					r.Id_emp_hora_fk = Convert.ToInt32(ds.Rows[0]["id_emp_hora_fk"]);
					if (ds.Rows[0]["estado_hora"] != System.DBNull.Value)
						r.Estado_hora = ds.Rows[0]["estado_hora"].ToString();
					if (ds.Rows[0]["estado_hora"] == System.DBNull.Value)
						r.Estado_hora = "";
					if (ds.Rows[0]["fecha_registro_hora"] != System.DBNull.Value)
						r.Fecha_registro_hora = Convert.ToDateTime(ds.Rows[0]["fecha_registro_hora"]);
					if (ds.Rows[0]["fecha_registro_hora"] == System.DBNull.Value)
						r.Fecha_registro_hora = DateTime.Now;
					r.Cat_jor_id_fk = Convert.ToInt32(ds.Rows[0]["cat_jor_id_fk"]);
					if (ds.Rows[0]["caduca_hora"] != System.DBNull.Value)
						r.Caduca_hora = ds.Rows[0]["caduca_hora"].ToString();
					if (ds.Rows[0]["caduca_hora"] == System.DBNull.Value)
						r.Caduca_hora = "";
					r.Empleados = empleadosBuilder.Recuperar("id_emp=" + ds.Rows[0]["id_emp_hora_fk"]);
					r.Cat_jornada = cat_jornadaBuilder.Recuperar("id_jor=" + ds.Rows[0]["cat_jor_id_fk"]);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("horario_empresa", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmbhorario_empresa, string filtro, string nombre_display)
		{
			cmbhorario_empresa.DataSource = ListarTodos(filtro);
			cmbhorario_empresa.DisplayMember = nombre_display;
			cmbhorario_empresa.ValueMember = "id_hora";
		}

        //public static DataTable ListarTodos_Alias(string filtro)
        //{
        //    DataTable r = new DataTable();
        //    try
        //    {
        //        ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
        //        r = bd.EjecutarSelectDs("id_hora AS id_hora,nombre_hora AS nombre_hora,hora_inicio_hora AS hora_inicio_hora,hora_fin_hora AS hora_fin_hora,jornada AS jornada,id_emp_hora_fk AS id_emp_hora_fk,estado_hora AS estado_hora,fecha_registro_hora AS fecha_registro_hora,cat_jor_id_fk AS cat_jor_id_fk,caduca_hora AS caduca_hora", "horario_empresa", filtro).Tables[0];
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    return r;
        //}
        public static DataTable ListarTodos_Alias(string filtro)
        {
            DataTable r = new DataTable();
            try
            {
                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
                r = bd.EjecutarSelectDs("id_hora AS CODIGO,nombre_hora AS \"DIA SEMANA\",hora_inicio_hora AS \"HORA INICIO\",hora_fin_hora AS \"HORA FIN\",jornada AS JORNADA,id_emp_hora_fk AS id_emp_hora_fk,estado_hora AS ESTADO,fecha_registro_hora AS \"FECHA REGISTRO\"", "horario_empresa", filtro).Tables[0];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return r;
        }

        public static DataTable ListarTodos_Joins_Cat_jornada_Alias_personalizada(string filtro)
        {
            DataTable r = new DataTable();
            string joins_ = "";
            string campos_ = "id_hora AS CODIGO,nombre_hora AS \"DIA SEMANA\",hora_inicio_hora AS \"HORA INICIO\",hora_fin_hora AS \"HORA FIN\",jornada AS JORNADA,id_emp_hora_fk AS id_emp_hora_fk,estado_hora AS ESTADO,fecha_registro_hora AS \"FECHA REGISTRO\"," +
                             "cat_jornada.tipo_jor AS \"TIPO\"";
            try
            {
                if (filtro == "")
                    joins_ = "horario_empresa.cat_jor_id_fk = cat_jornada.id_jor";
                else
                    joins_ = "horario_empresa.cat_jor_id_fk = cat_jornada.id_jor AND " + filtro;
                r = ValidarBuilder.ListarTodos(joins_, "horario_empresa, cat_jornada", campos_).Tables[0];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return r;
        }
		public static List<horario_empresa> ListarTodos_List(string filtro)
		{
			List<horario_empresa> r = new List<horario_empresa>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("id_hora="+dt.Rows[i]["id_hora"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Empleados(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp";
				else
					joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "horario_empresa, empleados","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Empleados_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "horario_empresa.id_hora AS horario_empresa.id_hora,horario_empresa.nombre_hora AS horario_empresa.nombre_hora,horario_empresa.hora_inicio_hora AS horario_empresa.hora_inicio_hora,horario_empresa.hora_fin_hora AS horario_empresa.hora_fin_hora,horario_empresa.jornada AS horario_empresa.jornada,horario_empresa.id_emp_hora_fk AS horario_empresa.id_emp_hora_fk,horario_empresa.estado_hora AS horario_empresa.estado_hora,horario_empresa.fecha_registro_hora AS horario_empresa.fecha_registro_hora,horario_empresa.cat_jor_id_fk AS horario_empresa.cat_jor_id_fk,horario_empresa.caduca_hora AS horario_empresa.caduca_hora," + 
							 "empleados.id_emp AS empleados.id_emp,empleados.cedula_emp AS empleados.cedula_emp,empleados.nombre_emp AS empleados.nombre_emp,empleados.apellido_emp AS empleados.apellido_emp,empleados.direccion_emp AS empleados.direccion_emp,empleados.telefono_emp AS empleados.telefono_emp,empleados.id_cat_cargo AS empleados.id_cat_cargo,empleados.genero_emp AS empleados.genero_emp,empleados.id_cat_nivel_acad AS empleados.id_cat_nivel_acad,empleados.fecha_nac_emp AS empleados.fecha_nac_emp,empleados.fecha_contrato_emp AS empleados.fecha_contrato_emp,empleados.id_cat_estado_civil_emp AS empleados.id_cat_estado_civil_emp,empleados.cargas_familiares_emp AS empleados.cargas_familiares_emp,empleados.foto_emp AS empleados.foto_emp,empleados.id_cat_doc_identificacion AS empleados.id_cat_doc_identificacion,empleados.fecha_salida_emp AS empleados.fecha_salida_emp,empleados.estado_emp AS empleados.estado_emp,empleados.cat_jor_id_fk_emp AS empleados.cat_jor_id_fk_emp,empleados.id_empr_fk AS empleados.id_empr_fk";
			try
			{
				if(filtro=="")
					joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp";
				else
					joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "horario_empresa, empleados",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Cat_jornada(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "horario_empresa.cat_jor_id_fk = cat_jornada.id_jor";
				else
					joins_ = "horario_empresa.cat_jor_id_fk = cat_jornada.id_jor AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "horario_empresa, cat_jornada","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Cat_jornada_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "horario_empresa.id_hora AS horario_empresa.id_hora,horario_empresa.nombre_hora AS horario_empresa.nombre_hora,horario_empresa.hora_inicio_hora AS horario_empresa.hora_inicio_hora,horario_empresa.hora_fin_hora AS horario_empresa.hora_fin_hora,horario_empresa.jornada AS horario_empresa.jornada,horario_empresa.id_emp_hora_fk AS horario_empresa.id_emp_hora_fk,horario_empresa.estado_hora AS horario_empresa.estado_hora,horario_empresa.fecha_registro_hora AS horario_empresa.fecha_registro_hora,horario_empresa.cat_jor_id_fk AS horario_empresa.cat_jor_id_fk,horario_empresa.caduca_hora AS horario_empresa.caduca_hora," + 
							 "cat_jornada.id_jor AS cat_jornada.id_jor,cat_jornada.tipo_jor AS cat_jornada.tipo_jor,cat_jornada.hora_ini_matutina AS cat_jornada.hora_ini_matutina,cat_jornada.hora_fin_matutina AS cat_jornada.hora_fin_matutina,cat_jornada.hora_ini_vespertina AS cat_jornada.hora_ini_vespertina,cat_jornada.hora_fin_vespertina AS cat_jornada.hora_fin_vespertina,cat_jornada.hora_ini_nocturna AS cat_jornada.hora_ini_nocturna,cat_jornada.hora_fin_nocturna AS cat_jornada.hora_fin_nocturna,cat_jornada.hora_ini_madrugada AS cat_jornada.hora_ini_madrugada,cat_jornada.hora_fin_madrugada AS cat_jornada.hora_fin_madrugada,cat_jornada.nro_dias AS cat_jornada.nro_dias";
			try
			{
				if(filtro=="")
					joins_ = "horario_empresa.cat_jor_id_fk = cat_jornada.id_jor";
				else
					joins_ = "horario_empresa.cat_jor_id_fk = cat_jornada.id_jor AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "horario_empresa, cat_jornada",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp AND horario_empresa.cat_jor_id_fk = cat_jornada.id_jor ";
				else
					joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp AND horario_empresa.cat_jor_id_fk = cat_jornada.id_jor AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "empleados,cat_jornada,horario_empresa","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "horario_empresa.id_hora AS horario_empresa.id_hora,horario_empresa.nombre_hora AS horario_empresa.nombre_hora,horario_empresa.hora_inicio_hora AS horario_empresa.hora_inicio_hora,horario_empresa.hora_fin_hora AS horario_empresa.hora_fin_hora,horario_empresa.jornada AS horario_empresa.jornada,horario_empresa.id_emp_hora_fk AS horario_empresa.id_emp_hora_fk,horario_empresa.estado_hora AS horario_empresa.estado_hora,horario_empresa.fecha_registro_hora AS horario_empresa.fecha_registro_hora,horario_empresa.cat_jor_id_fk AS horario_empresa.cat_jor_id_fk,horario_empresa.caduca_hora AS horario_empresa.caduca_hora," + 
							 "empleados.id_emp AS empleados.id_emp,empleados.cedula_emp AS empleados.cedula_emp,empleados.nombre_emp AS empleados.nombre_emp,empleados.apellido_emp AS empleados.apellido_emp,empleados.direccion_emp AS empleados.direccion_emp,empleados.telefono_emp AS empleados.telefono_emp,empleados.id_cat_cargo AS empleados.id_cat_cargo,empleados.genero_emp AS empleados.genero_emp,empleados.id_cat_nivel_acad AS empleados.id_cat_nivel_acad,empleados.fecha_nac_emp AS empleados.fecha_nac_emp,empleados.fecha_contrato_emp AS empleados.fecha_contrato_emp,empleados.id_cat_estado_civil_emp AS empleados.id_cat_estado_civil_emp,empleados.cargas_familiares_emp AS empleados.cargas_familiares_emp,empleados.foto_emp AS empleados.foto_emp,empleados.id_cat_doc_identificacion AS empleados.id_cat_doc_identificacion,empleados.fecha_salida_emp AS empleados.fecha_salida_emp,empleados.estado_emp AS empleados.estado_emp,empleados.cat_jor_id_fk_emp AS empleados.cat_jor_id_fk_emp,empleados.id_empr_fk AS empleados.id_empr_fk," + 
							 "cat_jornada.id_jor AS cat_jornada.id_jor,cat_jornada.tipo_jor AS cat_jornada.tipo_jor,cat_jornada.hora_ini_matutina AS cat_jornada.hora_ini_matutina,cat_jornada.hora_fin_matutina AS cat_jornada.hora_fin_matutina,cat_jornada.hora_ini_vespertina AS cat_jornada.hora_ini_vespertina,cat_jornada.hora_fin_vespertina AS cat_jornada.hora_fin_vespertina,cat_jornada.hora_ini_nocturna AS cat_jornada.hora_ini_nocturna,cat_jornada.hora_fin_nocturna AS cat_jornada.hora_fin_nocturna,cat_jornada.hora_ini_madrugada AS cat_jornada.hora_ini_madrugada,cat_jornada.hora_fin_madrugada AS cat_jornada.hora_fin_madrugada,cat_jornada.nro_dias AS cat_jornada.nro_dias";
			try
			{
				if(filtro=="")
					joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp AND horario_empresa.cat_jor_id_fk = cat_jornada.id_jor ";
				else
					joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp AND horario_empresa.cat_jor_id_fk = cat_jornada.id_jor AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "empleados,cat_jornada,horario_empresa",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

        public static DataTable ListarTodos_Joins_Alias_personaliza(string filtro)
        {
            DataTable r = new DataTable();
            string joins_ = "";
            string campos_ = "empleados.id_emp AS \"ID EMP.\",empleados.cedula_emp AS \"CI. / Ruc.\",CONCAT(empleados.nombre_emp,' ',empleados.apellido_emp) AS Empleado," +
                             "horario_empresa.id_hora AS ID,'POR ENTRAR' AS SITUACION,NOW() AS \"Fecha Ingreso\",horario_empresa.hora_inicio_hora AS \"Hora por Entrar\"," +
                             "horario_empresa.nombre_hora AS Dia,horario_empresa.hora_fin_hora AS \"Hora a Salir\",horario_empresa.jornada AS Jornada";
            try
            {
                if (filtro == "")
                    joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp AND horario_empresa.cat_jor_id_fk = cat_jornada.id_jor ";
                else
                    joins_ = "horario_empresa.id_emp_hora_fk = empleados.id_emp AND horario_empresa.cat_jor_id_fk = cat_jornada.id_jor AND  " + filtro;
                r = ValidarBuilder.ListarTodos(joins_, "empleados,cat_jornada,horario_empresa", campos_).Tables[0];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return r;
        }

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static horario_empresa valida_campos_horario_empresa(Control ctrl_id_hora,TextBox txt_nombre_hora,DateTime dpk_hora_inicio_hora,DateTime dpk_hora_fin_hora,TextBox txt_jornada,Control ctrl_id_emp_hora_fk,TextBox txt_estado_hora,DateTime dpk_fecha_registro_hora,Control ctrl_cat_jor_id_fk,TextBox txt_caduca_hora)
		{
			bool r = true;
			horario_empresa new_horario_empresa = new horario_empresa();
			try
			{
				if(ctrl_id_hora.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_hora = (TextBox)ctrl_id_hora;
					if (txt_id_hora.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_hora","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_hora.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_hora","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_horario_empresa.Id_hora = Convert.ToInt32(txt_id_hora.Text);
				}
				if(ctrl_id_hora.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_hora = (ComboBox)ctrl_id_hora;
					if (cmb_id_hora.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_hora","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_horario_empresa.Id_hora = Convert.ToInt32(cmb_id_hora.SelectedValue);
				}
				if (txt_nombre_hora.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la nombre_hora","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_horario_empresa.Nombre_hora = txt_nombre_hora.Text;
				if (r)
					new_horario_empresa.Hora_inicio_hora = dpk_hora_inicio_hora;
				if (r)
					new_horario_empresa.Hora_fin_hora = dpk_hora_fin_hora;
				if (txt_jornada.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la jornada","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_horario_empresa.Jornada = txt_jornada.Text;
				if(ctrl_id_emp_hora_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_emp_hora_fk = (TextBox)ctrl_id_emp_hora_fk;
					if (txt_id_emp_hora_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_emp_hora_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_emp_hora_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_emp_hora_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_horario_empresa.Id_emp_hora_fk = Convert.ToInt32(txt_id_emp_hora_fk.Text);
				}
				if(ctrl_id_emp_hora_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_emp_hora_fk = (ComboBox)ctrl_id_emp_hora_fk;
					if (cmb_id_emp_hora_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_emp_hora_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_horario_empresa.Id_emp_hora_fk = Convert.ToInt32(cmb_id_emp_hora_fk.SelectedValue);
				}
				if (txt_estado_hora.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la estado_hora","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_horario_empresa.Estado_hora = txt_estado_hora.Text;
				if (r)
					new_horario_empresa.Fecha_registro_hora = dpk_fecha_registro_hora;
				if(ctrl_cat_jor_id_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_cat_jor_id_fk = (TextBox)ctrl_cat_jor_id_fk;
					if (txt_cat_jor_id_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la cat_jor_id_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_cat_jor_id_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la cat_jor_id_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_horario_empresa.Cat_jor_id_fk = Convert.ToInt32(txt_cat_jor_id_fk.Text);
				}
				if(ctrl_cat_jor_id_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_cat_jor_id_fk = (ComboBox)ctrl_cat_jor_id_fk;
					if (cmb_cat_jor_id_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la cat_jor_id_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_horario_empresa.Cat_jor_id_fk = Convert.ToInt32(cmb_cat_jor_id_fk.SelectedValue);
				}
				if (txt_caduca_hora.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la caduca_hora","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_horario_empresa.Caduca_hora = txt_caduca_hora.Text;

				if(!r)
					new_horario_empresa = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_horario_empresa;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_hora,TextBox txt_nombre_hora,DateTime dpk_hora_inicio_hora,DateTime dpk_hora_fin_hora,TextBox txt_jornada,Control ctrl_id_emp_hora_fk,TextBox txt_estado_hora,DateTime dpk_fecha_registro_hora,Control ctrl_cat_jor_id_fk,TextBox txt_caduca_hora)
		{
			try
			{
				horario_empresa new_horario_empresa =valida_campos_horario_empresa(ctrl_id_hora,txt_nombre_hora,dpk_hora_inicio_hora,dpk_hora_fin_hora,txt_jornada,ctrl_id_emp_hora_fk,txt_estado_hora,dpk_fecha_registro_hora,ctrl_cat_jor_id_fk,txt_caduca_hora); 
				if(new_horario_empresa!=null)
					GrabarViaSql(new_horario_empresa,true);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion

	}
}
